package com.digital.welcome.util;


import org.springframework.stereotype.Component;
import org.springframework.util.Base64Utils;

import java.security.MessageDigest;
import java.util.Base64;

/**
 * 加密工具类
 */

@Component
public class DataEncode {

    private static final String salt = "wuchengxiang";
//============================Base64 加密====================================

    /**
     * base64加密
     *
     * @param str 需要加密的字符串
     * @return 加密后的字符串
     */
    public String encodeBae64(String str) {
        int size = 2;

        // 处理要加密的数据
        String encodeData = "{" + salt + "}" + str;
        Base64.Encoder encoder = Base64.getEncoder();
        // 执行多次编码操作
        for (int x = 0; x < size; x++) {
            // 加密操作
            encodeData = encoder.encodeToString(encodeData.getBytes());
        }
        return encodeData;
    }

    /**
     * Base64 解码
     *
     * @param str 需要解密的字符串
     * @return 返回解密字符串
     */
    public String decodeBae64(String str) {
        // 获取加密次数
//        int size = dataEncodeProperties.getSize();
        // 获取加密盐值
//        String salt = dataEncodeProperties.getSalt();
        // 获得解密类
        Base64.Decoder decoder = Base64.getDecoder();
        // 根据字节数组进行解密操作
        byte[] data = str.getBytes();
//        for (int x = 0 ; x < size; x ++) {
//            //多次解密
//            data = decoder.decode(data) ;
//        }
        // 包含有盐值的数据

        return new String(decoder.decode(data));
    }

//=======================MD5 加密=======================================

    /**
     * MD5 加密
     *
     * @param str 需要加密的字符串
     * @return 返回加密后的字符串
     */
    public String encodeMD5(String str) {
        try {
            // 生成一个MD5加密计算摘要
            MessageDigest md = MessageDigest.getInstance("MD5");
            byte[] digest = md.digest((str + salt).getBytes());
            return new String(Base64Utils.encode(digest));
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }

}
